Semantic 청킹에 문장 분리기를 바꿔보자
(24년 12월 추가)
글 내용과 관련해 강의를 런칭하였습니다. 더 많은 정보가 필요하신 분들은 참고해주세요!!
▪ 쿠폰코드: PRDTEA241202_auto
▪ 할인액: 4만원 (~25/1/5 까지 사용가능)
▪ 강의링크: https://bit.ly/3BayH1F
제가 직접 작성한 것이 아닌 AutoRAG를 같이 만든 김병욱 연구원이 쓴 글입니다.
지난 청킹 실험에서 쟁쟁한 후보들을 재치고 1등을 했던 라마인덱스의 시맨틱 청킹.
- 지난 실험 → 청킹은 한국어 RAG 답변 성능을 얼마나 올려줄까?
라마인덱스의 청킹은 어떻게 하길래 1등을 했을까?
0. 라마인덱스 시맨틱 청킹 원리 🔍
라마인덱스의 시맨틱 청킹은 크게 3가지 단계를 거친다
- 문장 분리기로 파싱된 텍스트를 문장으로 나눈다.
- 임베딩 모델로 문장을 벡터 임베딩 한다.
- 문장 간의 벡터 유사도 점수를 계산해서 기준보다 높으면 하나의 단락으로 합친다.
원리를 보다 보니 이런 생각이 든다.
시맨틱 청킹에서는 문장 분리기와 임베딩 모델의 성능이 중요하겠는데? 🤔
그래서 다음 두 가지 실험을 해보기로 한다.
- 문장 분리기를 바꿔가며, RAG 답변 성능 비교해보기
- 임베딩 모델을 바꿔가며, RAG 답변 성능 비교해보기
이번 글에서는 첫 번째 실험인 문장 분리기만 바꿔가며 RAG 답변 성능을 비교해보고자 한다.
1. 라마인덱스 기본 문장 분리기 Punkt
라마인덱스 시맨틱 청킹에서 문장 분리기는 Optional parameter여서 따로 지정해주지 않을 경우 기본 문장 분리기를 사용한다.
그렇다면 가장 먼저, 저번 실험에서 사용한 라마인덱스 시맨틱 청킹의 기본 문장 분리기를 확인해보자.
라마인덱스의 코드를 찾아보니, 기본 문장 분리기는 PunktSentenceTokenizer를 사용하고 있었다.
(길어서 Punkt라고만 앞으로 부르도록 하겠다 😂)
Punkt는 한국어를 할 수 있나❓
문득 궁금증이 생겨서 찾아보았다.
languages="Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Italian, Malayalam, Norwegian, Polish, Portuguese, Russian, Slovene, Spanish, Swedish, Turkish”
한국어는 없었다
한국어를 못 하는 문장분리기를 사용했는데, 지난 실험에서 1등을 하다니..
그러다 갑자기 머리속에 이런 생각이 들었다.
한국어 문장 분리기를 사용하면 더 높은 점수를 받지 않을까 ?? 😁
신이 난 상태로 한국어 문장 분리기를 찾아보았다.
2. 한국어 문장 분리기 KSS (Korean Sentence Splitter)
가장 먼저 찾았던 한국어 문장 분리기는 KSS였다.
설레는 마음으로 빠르게 AutoRAG를 사용해서 RAG 답변 성능을 비교해보았다.
RAG 성능 평가에 사용되는 데이터와 질문은 모두 지난 실험과 동일하게 진행하였다!
2-1. RAG 답변 성능 비교
G-Eval Consistency:
- Punkt를 사용한 시맨틱 청킹: 3.5128
- KSS를 사용한 시맨틱 청킹: 2.79
???!?
내 예상과는 정 반대의 결과가 나와버렸다.. 🫨
실험 코드도 몇 번이고 다시 확인해봤지만 이상한 건 하나도 없었다.
바뀐 건 문장 분리기 밖에 없으므로, 문장 분리기의 성능을 정성 평가해보기로 한다.
2-2. 문장 분리기 성능 정성평가
실험에 사용한 데이터는 공개할 수 없어, 빠르게 보험 약관 데이터로 문장 분리기의 성능을 비교해보았다!
2-2-1. KSS 문장 분리 결과
해당 보험 약관 데이터에서는 전혀 문장 분리를 해내지 못 하는 모습이다 ..
2-2-2. Punkt 문장 분리 결과
가.나. 이런 것들은 확실히 구분하지 못하지만, 생각보다는 문장 분리를 잘 해내는 모습이다.
한국어가 지원 가능한 언어에 없길래 엉망 진창으로 결과가 나왔을 줄 알았는데, 나쁘지 않았다.
KSS의 문장 분리 성능이 너무 아쉬웠다. 그래서 더 정확한 비교를 위해 문장 분리 성능이 높은 한국어 문장 분리기를 찾아보기로 한다.
3. 한국어 문장 분리기 Kiwi
성능 높은 한국어 문장 분리기를 찾던 중, 어떤 분께서 진행하셨던 실험 결과를 찾을 수 있었다! 🙏🙏
해당 실험 결과에 따르면, KSS는 문장 분리에 있어 살짝 아쉬운 결과를 보였고 Kiwi가 가장 좋은 성능을 보였다고 한다.
그래서 다시 기대감에 부푼 채 Kiwi의 문장 분리 성능을 정성평가해보기로 한다.
3-1. Kiwi 문장 분리 성능 정성평가
가장 좋은 성능을 보여주었다.
특히나 가. 나. 이런 것들까지 인식해 문장을 분리하는 모습이 인상적이었다.
만족스러운 성능을 보여준 Kiwi다.
3-2. RAG 답변 성능 평가
3-2-1. G-Eval Consistency
- Punkt를 사용한 시맨틱 청킹: 3.5128
- Kiwi를 사용한 시맨틱 청킹: 3.3846
비슷한 결과가 나왔다❗
우리는 지난 LLM은 얼마나 일관적으로 평가할까? 실험에서 G-Eval Consistency 점수가 최대 0.15점까지는 튄다는 것을 확인했었다.
따라서 조금 더 정확하게 답변 성능을 비교해보기 위해, 실험에 사용한 40개의 질문 중 17개의 질문을 골라 정성평가를 진행하였다.
이 역시 지난 청킹 실험과 동일한 질문을 이용하여 정성평가 하였다!
3-2-2. 정성 평가
채점 기준
- 1점: 정확하게 답합
- 0.5점: 틀리진 않았지만 애매하게 답함
- 0점: 모른다고 답함
- -1점: 환각 증세를 보임
Punkt | Kiwi | |
---|---|---|
1 | 13 | 14 |
0.5 | 3 | 2 |
0 | 0 | 0 |
-1 | 1 | 1 |
평균 (17개) | 0.7941 | 0.8235 |
정성평가 결과는 Kiwi가 높은 점수를 받았다.
Punkt보다 1문제 더 1점을 받았는데, 거의 비슷한 결과를 보였다
4. 결론
❗ 문장 분리 성능
- Kiwi
- Punkt
- KSS
❗RAG 답변 성능 평가 결과
- Kiwi = Punkt (거의 비슷함)
- KSS
📌결론
- 문장분리기 성능이 일정 수준 이상이면, RAG 답변 성능에는 크게 영향을 주지 않는다.
- 문장분리기 성능이 떨어지면, RAG 답변 성능 역시 크게 떨어진다.
📌주의점
- 문장 분리기는 특정 데이터마다 다른 성능을 보일 수 있다.
- G-Eval은 40개의 질문, 정성평가는 17개의 질문으로만 평가하여 통계적으로 유의미하지 않을 수 있다.
마지막으로 도움이 되었다면 AutoRAG 스타 한 번씩 부탁드립니다 ^~^